package br.com.toscano.gobra.view;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

import javax.faces.model.SelectItem;
import javax.inject.Inject;

import br.com.toscano.gobra.business.EstadoBC;
import br.com.toscano.gobra.business.LicitacaoBC;
import br.com.toscano.gobra.business.ObraBC;
import br.com.toscano.gobra.business.SituacaoLicitacaoBC;
import br.com.toscano.gobra.business.TipoLicitacaoBC;
import br.com.toscano.gobra.business.UnidadeOrcamentariaBC;
import br.com.toscano.gobra.domain.Estado;
import br.com.toscano.gobra.domain.Licitacao;
import br.com.toscano.gobra.domain.Obra;
import br.com.toscano.gobra.domain.SituacaoLicitacao;
import br.com.toscano.gobra.domain.TipoLicitacao;
import br.com.toscano.gobra.domain.UnidadeOrcamentaria;
import br.gov.frameworkdemoiselle.annotation.PreviousView;
import br.gov.frameworkdemoiselle.stereotype.ViewController;
import br.gov.frameworkdemoiselle.template.AbstractEditPageBean;
import br.gov.frameworkdemoiselle.transaction.Transactional;

@ViewController
@PreviousView("./licitacao_list.jsf")
public class LicitacaoEditMB extends AbstractEditPageBean<Licitacao, Long> {

	private static final long serialVersionUID = 1L;

	private String tipoAcao;
	
	public String getTipoAcao() {
		return tipoAcao;
	}

	public void setTipoAcao(String tipoAcao) {
		this.tipoAcao = tipoAcao;
	}

	@Inject
	private LicitacaoBC licitacaoBC;
	
	private Integer posicaoEmpresa;
	
	public List<SelectItem> getUfCreas() {
		ufCreas = new ArrayList<SelectItem>();
		List<Estado> lista = ufCreaBC.findAll();
		for (Estado obj: lista) {
			ufCreas.add(new SelectItem(obj.getUf() , obj.getDescricao()));
		}
		return ufCreas;
	}

	public void setUfCreas(List<SelectItem> ufCreas) {
		this.ufCreas = ufCreas;
	}

	public String getUfCrea() {
		return ufCrea;
	}

	public void setUfCrea(String ufCrea) {
		this.ufCrea = ufCrea;
	}

	public String getNomeRazaoSocial() {
		return nomeRazaoSocial;
	}

	public void setNomeRazaoSocial(String nomeRazaoSocial) {
		this.nomeRazaoSocial = nomeRazaoSocial;
	}

	public String getCnpj() {
		return cnpj;
	}

	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	public String getNomeEngenheiroResponsavel() {
		return nomeEngenheiroResponsavel;
	}

	public void setNomeEngenheiroResponsavel(String nomeEngenheiroResponsavel) {
		this.nomeEngenheiroResponsavel = nomeEngenheiroResponsavel;
	}

	public String getNumCrea() {
		return numCrea;
	}

	public void setNumCrea(String numCrea) {
		this.numCrea = numCrea;
	}

	public String getNomeContato() {
		return nomeContato;
	}

	public void setNomeContato(String nomeContato) {
		this.nomeContato = nomeContato;
	}

	public String getFoneContato() {
		return foneContato;
	}

	public void setFoneContato(String foneContato) {
		this.foneContato = foneContato;
	}

	public BigDecimal getValorProposta() {
		return valorProposta;
	}

	public void setValorProposta(BigDecimal valorProposta) {
		this.valorProposta = valorProposta;
	}

	public String getIndVencedora() {
		return indVencedora;
	}

	public void setIndVencedora(String indVencedora) {
		this.indVencedora = indVencedora;
	}

	@Inject
	private EstadoBC ufCreaBC;
	private List<SelectItem> ufCreas;
	private String ufCrea;
	private String nomeRazaoSocial;
	private String cnpj;
	private String nomeEngenheiroResponsavel;
	private String numCrea;
	private String nomeContato;
	private String foneContato;
	private BigDecimal valorProposta;
	private String indVencedora;

	
	
	@Inject
	private UnidadeOrcamentariaBC unidadeOrcamentariaBC;
	private List<SelectItem> unidadeOrcamentarias;
	private Long unidadeOrcamentaria;

	public List<SelectItem> getUnidadeOrcamentarias() {
		unidadeOrcamentarias = new ArrayList<SelectItem>();
		List<UnidadeOrcamentaria> lista = unidadeOrcamentariaBC.findAll();
		for (UnidadeOrcamentaria obj: lista) {
			unidadeOrcamentarias.add(new SelectItem(obj.getId() , obj.getDescricao()));
		}
		return unidadeOrcamentarias;
	}

	public void setUnidadeOrcamentarias(List<SelectItem> unidadeOrcamentarias) {
		this.unidadeOrcamentarias = unidadeOrcamentarias;
	}

	public Long getUnidadeOrcamentaria() {
		if (obra == null && this.getBean().getObra() != null) {
			unidadeOrcamentaria = this.getBean().getObra().getUnidadeOrcamentaria().getId();
		}
		return unidadeOrcamentaria;
	}

	public void setUnidadeOrcamentaria(Long unidadeOrcamentaria) {
		this.unidadeOrcamentaria = unidadeOrcamentaria;
	}

	@Inject
	private ObraBC obraBC;
	private List<SelectItem> obras;
	private Long obra;

	public List<SelectItem> getObras() {
		obras = new ArrayList<SelectItem>();
		List<Obra> lista = obraBC.findAll();
		for (Obra obj: lista) {
			obras.add(new SelectItem(obj.getId() , obj.getTitulo()));
		}
		return obras;
	}

	public void setObras(List<SelectItem> obras) {
		this.obras = obras;
	}

	public Long getObra() {
		if (obra == null && this.getBean().getObra() != null) {
			obra = this.getBean().getObra().getId();
			unidadeOrcamentaria = this.getBean().getObra().getUnidadeOrcamentaria().getId();
		}
		return obra;
	}

	public void setObra(Long obra) {
		this.obra = obra;
	}
	
	@Inject
	private SituacaoLicitacaoBC situacaoLicitacaoBC;
	private List<SelectItem> situacaoLicitacaos;
	private Long situacaoLicitacao;

	public List<SelectItem> getSituacaoLicitacaos() {
		situacaoLicitacaos = new ArrayList<SelectItem>();
		List<SituacaoLicitacao> lista = situacaoLicitacaoBC.findAll();
		for (SituacaoLicitacao obj: lista) {
			situacaoLicitacaos.add(new SelectItem(obj.getId(), obj.getDescricao()));
		}

		return situacaoLicitacaos;
	}

	public void setSituacaoLicitacaos(List<SelectItem> situacaoLicitacaos) {
		this.situacaoLicitacaos = situacaoLicitacaos;
	}

	public Long getSituacaoLicitacao() {
		if (situacaoLicitacao == null && this.getBean().getSituacao() != null)
			situacaoLicitacao = this.getBean().getSituacao().getId();
		return situacaoLicitacao;
	}

	public void setSituacaoLicitacao(Long situacaoLicitacao) {
		this.situacaoLicitacao = situacaoLicitacao;
	}

	@Inject
	private TipoLicitacaoBC tipoLicitacaoBC;
	private List<SelectItem> tipoLicitacaos;
	private Long tipoLicitacao;

	public List<SelectItem> getTipoLicitacaos() {
		tipoLicitacaos = new ArrayList<SelectItem>();
		List<TipoLicitacao> lista = tipoLicitacaoBC.findAll();
		for (TipoLicitacao obj: lista) {
			tipoLicitacaos.add(new SelectItem(obj.getId(), obj.getDescricao()));
		}
		return tipoLicitacaos;
	}

	public void setTipoLicitacaos(List<SelectItem> tipoLicitacaos) {
		this.tipoLicitacaos = tipoLicitacaos;
	}

	public Long getTipoLicitacao() {
		if (tipoLicitacao == null && this.getBean().getTipoLicitacao()  != null)
			tipoLicitacao = this.getBean().getTipoLicitacao().getId();
		return tipoLicitacao;
	}

	public void setTipoLicitacao(Long tipoLicitacao) {
		this.tipoLicitacao = tipoLicitacao;
	}

	@Override
	@Transactional
	public String delete() {
		this.licitacaoBC.delete(getId());
		return getPreviousView();
	}
	
	public void montarObjeto(){
		if (this.obra != null) {
			this.getBean().setObra(this.obraBC.load(this.obra));
		}
		if (this.tipoLicitacao != null) {
			this.getBean().setTipoLicitacao(this.tipoLicitacaoBC.load(this.tipoLicitacao));
		}
		if (this.situacaoLicitacao != null) {
			this.getBean().setSituacao(this.situacaoLicitacaoBC.load(this.situacaoLicitacao));
		}
		
	}
	
	@Override
	@Transactional
	public String insert() {
		montarObjeto();
		this.licitacaoBC.insert(getBean());
		return getPreviousView();
	}
	
	@Override
	@Transactional
	public String update() {
		montarObjeto();
		this.licitacaoBC.update(getBean());
		return getPreviousView();
	}
	
	@Override
	protected Licitacao handleLoad(Long id) {
		setBean(this.licitacaoBC.load(id));
		
		return this.getBean();
	}
	
	public void exportarCronograma(){
		
	}
	
	public void adicionarEmpresa(){
		
	}

	public void removerEmpresa(){
		
	}

	public Integer getPosicaoEmpresa() {
		return posicaoEmpresa;
	}

	public void setPosicaoEmpresa(Integer posicaoEmpresa) {
		this.posicaoEmpresa = posicaoEmpresa;
	}
}